Browser based peer to peer distribution system

ABSTRACT

A method of operation of a media distribution system includes: streaming a media object from an external system via a first browser; receiving a media request from a viewer device; determining a confirmation of whether the media request is for the media object; and serving a portion of the media object from a sandboxed memory of the first browser for presenting on a second browser of the viewer device in response to the confirmation.

CROSS REFERENCE TO RELATED APPLICATION

This application is a continuation of U.S. patent application Ser. No.13/591,078 filed Aug. 21, 2012, which claims the benefit of U.S.Provisional Patent Application Ser. No. 61/664,623 filed Jun. 26, 2012,and the subject matter thereof is incorporated herein by reference intheir entirety.

FIELD OF INVENTION

This invention relates generally to an online distribution system, andin particular to providing an online media stream distribution system.

BACKGROUND

In recent years, consumers have enjoyed traditional media over theInternet. For example, with the advent of Internet radio and InternetTV, consumers have been using their Internet-enabled computers to listento music and to watch videos. Contents that can be downloadable over theInternet include music, talk shows, presentations, interactiveapplications, games, video, audio books, other stream-enabled media, orany combination thereof. These contents are generally delivered torecipient devices through online distribution systems using proprietarydistribution software and hardware.

The difficulty of an online distribution system is that as requestorsfor the media streams increase, the total available bandwidth decreases.For example, user experience for popular video stream services may becrippled by the popularity of the service.

Existing online distribution services have tried to improve theirdistribution services by proposing solutions to reduce the amount ofdata moved across the network. However, such improvements only mitigatethe problem by reducing the inverse linear relationship between thenumber of users and bandwidth. As a result, user experience stilldeclines as the number of users increase for a given online distributionservice.

Specifically, users of online distribution systems do not have aneffective tool to watch media files over the Internet. Providing userswith efficient methods of delivering and streaming media files isvaluable in providing a better user experience for users. However,existing systems have not provided users with tools or methods ofpresenting them with the most effective method of online mediadistribution.

DISCLOSURE OF INVENTION

The present invention provides a method of operating a mediadistribution system including: streaming a media object from an externalsystem via a first browser; receiving a media request from a viewerdevice; determining a confirmation of whether the media request is forthe media object; and serving a portion of the media object from asandboxed memory of the first browser for presenting on a second browserof the viewer device in response to the confirmation.

In another embodiment, the present invention includes a method ofoperating a distribution server system including: providing adistribution application to a first viewer device for execution in afirst browser application; scheduling a media object to be streamed tothe distribution application; receiving a media request for the mediaobject from a second viewer device; and scheduling a portion of themedia object from the first viewer device to be served to a sandboxedmemory of a second browser application on the second viewer device.

The present invention also provides a distribution node systemincluding: a non-transitory memory including a first browserapplication; a processor for executing the first browser application; adistribution application for execution in the first browser application.The distribution application can comprise: a stream module for streaminga media object from an external system via the first browserapplication; a communication module for receiving a media request from aviewer device; a confirmation module, coupled to the stream module andthe communication module, for determining a confirmation of whether themedia request is for the media object; and a service module, coupled tothe confirmation module, the communication module, and the streammodule, for serving a portion of the media object from a sandboxedmemory of the first browser application for presenting on a secondbrowser of the viewer device in response to the confirmation.

In yet another embodiment, the present invention includes a distributionserver system including: a non-transitory memory including a deploymentmodule and a schedule module and a processor for executing thedeployment module, the schedule module, or any combination thereof. Thedeployment module, in this embodiment, is for providing a distributionapplication to a first viewer device for execution in a first browserapplication; and the schedule module, in this embodiment, is forreceiving a media request for a media object from a second viewer deviceand scheduling a portion of the media object from the first viewerdevice to be served to a sandboxed memory of a second browserapplication on the second viewer device.

Some embodiments of the invention have other aspects, elements,features, and steps in addition to or in place of what is describedabove. These potential additions and replacements are describedthroughout the rest of the specification

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates a media distribution system, in accordance with anembodiment of the invention.

FIG. 2 illustrates a block diagram of modules of a media distributionnode system, in accordance with another embodiment of the invention.

FIG. 3 illustrates an example of a requester viewer device parallelstreaming a media object from a network of viewer devices.

FIG. 4 illustrates a block diagram of modules of a distribution serversystem connected to viewer devices, in accordance with anotherembodiment of the invention.

FIG. 5 is a flow chart of a method of operating a media distributionsystem, such as the media distribution system of FIG. 1, in a furtherembodiment of the present invention

FIG. 6 is a diagrammatic representation of a machine in the example formof a computer system within which a set of instructions, for causing themachine to perform any one or more of the methodologies or modulesdiscussed herein, may be executed.

The figures depict various embodiments of the present invention forpurposes of illustration only. One skilled in the art will readilyrecognize from the following discussion that alternative embodiments ofthe structures and methods illustrated herein may be employed withoutdeparting from the principles of the invention described herein.

DETAILED DESCRIPTION

The present invention relates to methods of distributing media objectsthrough viewer devices. The present invention includes a first viewerdevice that is streaming a media object from a media server or fromanother viewer device. The present invention can include a second viewerdevice that would like to stream the same media object. The presentinvention provides a way for the first viewer device to act as a serverto stream portions of the media object received to the second viewer.

FIG. 1 illustrates a media distribution system 100, in accordance withan embodiment of the invention. The media distribution system 100 can bea peer to peer system capable of distributing media files between peersystems. The media distribution system 100 can be a browser-baseddistribution system. The media distribution system 100 can include afirst viewer device 102 connected to a media server system 104 and asecond viewer device 106 via a network channel 108. For example, thefirst viewer device 102, the media server system 104, or the secondviewer device 106 can be a computer system described in FIG. 6.

The media server system 104 is defined as a computer system, includingone or more devices for distributing media objects, such as a mediaobject 110. The media object 110 is defined as any digital contentcapable of being played or presented by a digital device. For example,the media object 110 can be audio file, talk shows, presentations,interactive applications, games, video, audio books, otherstream-enabled media, or any combination thereof. The media object 110can have a sequential property, where when the media object 110 isplayed, the media object 110 has a set duration of time and whereportions of the media object 110 correspond to pieces within a sequencein the set duration.

The media server system 104 can be a specialized computer server or canbe a conventional computer system like the first viewer device 102 andthe second viewer device 106. The first viewer device 102 and the secondviewer device 106 can be a conventional computer system executing, forexample, a Microsoft Windows-compatible operating system (OS), Apple OSX, and/or a Linux distribution. In another embodiment, the first viewerdevice 104 and the second view device 106 can be a device havingcomputer functionality, such as a personal digital assistant (PDA),mobile telephone, smart-phone, etc

The network channel 108 is defined as a medium of communication. Forexample, the network channel can be an Ethernet or other wire-basednetwork or a wireless NIC (WNIC) or wireless adapter for communicatingwith a wireless network, such as a WI-FI network. The network channel108 can be any suitable network for any suitable communicationinterface. As an example and not by way of limitation, the communicationchannel 504 can be an ad hoc network, a personal area network (PAN), alocal area network (LAN), a wide area network (WAN), a metropolitan areanetwork (MAN), or one or more portions of the Internet or a combinationof two or more of these. One or more portions of one or more of thesenetworks may be wired or wireless. As another example, the networkchannel 108 can be a wireless PAN (W PAN) (such as, for example, aBLUETOOTH WPAN), a WI-FI network, a WI-MAX network, a 3G or 4G network,a cable internet network, a dial-up network, a digital subscriber line(DSL) network, a cellular telephone network (such as, for example, aGlobal System for Mobile Communications (GSM) network).

In one embodiment, the network channel 108 uses standard communicationstechnologies and/or protocols. Thus, the network channel 108 can includelinks using technologies such as Ethernet, 802.11, worldwideinteroperability for microwave access (WiMAX), 3G, 4G, CDMA, DSL, etc.Similarly, the networking protocols used on the network channel 108 caninclude multiprotocol label switching (MPLS), the transmission controlprotocol/Internet protocol (TCP/IP), the User Datagram Protocol (UDP),the hypertext transport protocol (HTTP), the simple mail transferprotocol (SMTP), and the file transfer protocol (FTP). The dataexchanged over the network channel 108 can be represented usingtechnologies and/or formats including the hypertext markup language(HTML) and the extensible markup language (XML). In addition, all orsome of links can be encrypted using conventional encryptiontechnologies such as secure sockets layer (SSL), transport layersecurity (TLS), and Internet Protocol security (IPsec).

The first viewer device 102 can include a distribution application 112.The second viewer device 106 can also include the distributionapplication 112. The media server system 104 can also include thedistribution application 112.

The distribution application 112 can be software that is stored on amemory 114. The memory 114 is a non-transitory computer readable storagemedium. The memory 114 can contain software that is executable on acomputer system or a device with computer functionalities, such as thefirst viewer device 102, the second viewer device 106, or the mediaserver system 104. The distribution application 112 can also be ahardware module or a collection of hardware modules with logic circuitryto perform the methods of distributing the media object 110 inaccordance to the present disclosure. The distribution application 112can be a cloud-based software ran from a remote server of a cloudcomputing environment.

The distribution application 112 can be stored on a non-transitoryvolatile memory, such as Random Access Memory (RAM). The distributionapplication 112 can be downloaded from a website onto the memory 114 ofa host computer or a host device with a browser application on the hostcomputer or the host device, hereinafter “the host.” The distributionapplication 112 can be restricted in terms of access of the host onwhich it is operating from. For example, the distribution application112 can be restricted from scanning, reading, or writing from and to aportion or all of any memory on the host. The distribution application112 can be allotted a memory space on the memory 114 to store andprocess data for the distribution application 112.

The distribution application 112 can be a browser run-time instanceapplication that is terminated when the browser instance is terminatedor halted on the host computer or host device. Here, the browser isdefined as a software application for retrieving, presenting, andtraversing information resources on the World Wide Web. The browser isan application software designed to enable users to access, retrieve andview documents and other resources on the Internet. The browser instanceis defined as a run-time construct of an executing browser softwarehaving a sandboxed memory space to operate in as allocated by anoperating system.

The distribution application 112 can be implemented as a compiledapplication executable within the browser. The distribution application112 can also be implemented as a script that can be interpreted forexecution within the browser. For example, the distribution application112 can be based in Flash, HTML 5, JavaScript, Java applet, otherbrowser-based application, or any combination thereof.

FIG. 2 illustrates a block diagram of modules of a media distributionnode system 200, in accordance with another embodiment of the invention.For example, the media distribution node system 200 can be part of themedia distribution system 100 of FIG. 1 as implemented on the firstviewer device 102 of FIG. 1, the second viewer device 106 of FIG. 1, themedia server system 104 of FIG. 1, or any combination thereof.

The media distribution node system 200 can include one or more methodsof distributing media objects via a distribution application from and/orto a view device. The distribution application can be distributed from acomputer system, such as the computer system of FIG. 6, to viewerdevices, such as the first viewer device 102 of FIG. 1 or the secondviewer device 106 of FIG. 1. The one or more methods can be implementedby components, storages, or modules described below. The components andmodules can be implemented as hardware modules, software modules, or anycombination thereof. For example, the modules described can be softwaremodules implemented as instructions on a non-transitory memory capableof being executed by a processor or a controller on a machine.

The modules can be implemented as hardware modules, software modules, orany combination thereof. For example, all or some of the modules can beimplemented as part of the distribution application 112 of FIG. 1. Forexample, the modules described can be software modules implemented asinstructions on a non-transitory memory capable of being executed by aprocessor or a controller on a machine described in FIG. 6.

The storages or “stores”, described below are hardware components orportions of hardware components for storing digital data. Each of thestorage can be a single physical entity or distributed through multiplephysical devices. Each of the storage can be on separate physical deviceor share the same physical device or devices. Each of the stores canallocate specific storage spaces for run-time applications.

The media distribution node system 200 can include additional, fewer, ordifferent modules for various applications. Conventional components suchas network interfaces, security functions, load balancers, failoverservers, management and network operations consoles, and the like arenot shown so as to not obscure the details of the system.

The media distribution node system 200 can include a stream module 202.The stream module 202 is for streaming a media object 204. The streammodule 202 can reside on a viewer device, such as the first viewerdevice 102 of FIG. 1.

The stream module 202 can be for streaming the media object 204 via abrowser from a server system, such as the media object 110 of FIG. 1from the media server system 104. For example, the stream module 202 canstream a portion of a video with a Flash™ application running on aChrome™ browser from a video service provider and a portion of the videowith the same Flash™ application from a viewer device running the sameFlash application™ on a Mozilla™ browser. The streaming can includedownloading the media object 204 in sequential time chunks.Alternatively, the streaming can include downloading the media object204 in parallel, such as downloading different time chunks fromdifferent sources, giving bandwidth priority to earlier time chunks insequence.

The stream module 202 can store the media object 204 on a media storagespace 206. The media storage space 206 is a portion of memory allocatedfrom a memory storage of the media distribution node system 200, such asthe memory 114 of FIG. 1, with access privileges for the modules of themedia distribution node system 200.

The media distribution node system 200 can include a communicationmodule 208. The communication module 208 is for communicating betweendevices, such as between a media server system 104 of FIG. 1 and themedia distribution node system 200 and between devices of the mediadistribution system 100 of FIG. 1. The communication module 208 can befor receiving a media request 210 from a viewer device implementingmethods or modules of the media distribution node system 200, such asthe second viewer device 106 of FIG. 1.

The media request 210 is a digital package that specifies a media objectof which the requestor would like to stream. The media request 210 canalso include which portion of the media object specifically that therequester would like to stream. For example, the media request 210 canbe generated for the media object 204. For another example, the mediarequest 210 can be generated for the first three seconds portion of avideo. The media request 210 can include a media file ID, a physicallocation of the requestor, an Internet Protocol (IP) address of therequestor, a device type of the requestor, an operating system type ofthe requestor, a file type of the media object, or any combinationthereof.

The communication module 208 can reside on a viewer device, such as thefirst viewer device 102. For example, the communication module 208 canbe for communicating between the first viewer device 102 and the secondviewer device 106, including communicating the media request 210 fromthe second viewer device 106 to the first viewer device 102.Alternatively, the media request 210 can be sent from the requestingviewer device to the media server system, and then forwarded to thecommunication module 208 of the receiving viewer system.

The media distribution node system 200 can include a confirmation module212, coupled to the stream module 202 and the communication module 208.The confirmation module 212 can reside on a viewer device, such as thefirst viewer device 102 or the second viewer device 106. Theconfirmation module 212 is for determining whether to service therequesting viewer device, such as the second viewer device 106.

The confirmation module 212 can communicate with the media server system104 of FIG. 1 to verify that the media request 210 came from arequesting viewer device that is registered with the media server system104. The confirmation module 212 can determine whether to service therequesting viewer device based on whether the media request 210 is forthe media object 204. The confirmation module 212 can determine whetherto service the requesting viewer device by calculating a distancebetween the requesting viewer device and a physical location of themedia distribution node system 200.

For example, a request for a MP3 song called “Morning Melody” can bereceived at the communication module 208 of the media distribution nodesystem 200. The confirmation module 212 can determine that “MorningMelody” is being streamed on the media distribution node system 200. Theconfirmation module 212 can further determine that the requesting viewerdevice is on a different continent and more than 1000 miles apart fromthe media distribution node system 200. The confirmation module 212 candetermine that although the request is for the media object “MorningMelody” being streamed to the receiver viewer device, the receiverviewer device still should not service the requesting viewer devicebecause it is beyond a distance threshold.

For example, the confirmation module 212 can be for determining whetherthe media request 210 from the second viewer device 106 is for the mediaobject 204 stored and streamed on the first viewer device 102. Theconfirmation module 212 of a servicing viewer device can determinewhether to service the requesting viewer device based on a property orattribute of the servicing viewer device, the requesting viewer device,or any combination thereof. For example, the property can includeavailable bandwidth, available processing power, available memory size,operating system type, or any combination thereof. The confirmationmodule 212 can determine whether to service the requesting viewer devicebased on properties of both the requesting viewer device and the mediadistribution node system 200.

For example, the confirmation module 212 of a servicing viewer devicecan determine that a requesting viewer device must have a Windows™operating system with at least 500 MB of memory and a download speedfaster than the servicing viewer device. The servicing viewer device mayhave an upload speed of 5 MBPS. A requesting viewer device may have aWindows XP™ platform with 1 GB of memory and 6 MBPS download speed. Therequesting viewer device in this case may qualify to be serviced by theservicing viewer device as determined by the confirmation module 212.

The media distribution node system 200 can include a service module 218coupled to the confirmation module 212, the communication module 208,and the stream module 202. The service module 218 is for serving a firstportion 220 of the media object 204 to the viewer device when the mediarequest 210 is determined to be for the media object 204. The firstportion 220 of the media object 204 can be specified in the mediarequest 210. The size of the first portion 220 can also be determinedbased on a property of the media distribution node system 200, such asavailable bandwidth, available processing power, available memory, orany combination thereof.

The service module 218 can reside on a viewer device, such as the firstviewer device 102. For example, the service module 218 can be forserving the first portion 220 of the media object 204 from the firstviewer device 102 to the second viewer device 106.

The media distribution node system 200 can include a request module 224.The request module 224 is for requesting and receiving a second portion226 of the media object 204. The second portion 226 can be determined byselecting a portion from missing portions of the media object 204 yet tobe downloaded. The request module 224 can include sending the mediarequest 210 to a target viewer device. The request module 224 can selectthe target viewer device.

For example, the request module 224 can request the first three secondsof a music file that has not been received yet. For another example, therequest module 224 can prioritize to request a portion earliest in timesequence from the missing portions of the media object 204.

A viewer device can be selected as the target viewer device based onproperties of the target viewer device. The target viewer device can bedirectly recommended by a media server system, such as the media server104 of FIG. 1. The target viewer device can also be selected with theassistance of a topology management module 228.

For example, the request module 224 can determine that the first viewerdevice 102 of FIG. 1 has the most available bandwidth out of all of theviewer devices having the media object 204 of interest. Hence, the firstviewer device 102 may be designated as the target viewer device by therequest module 224.

Although not shown in the figures, the request module 224 can be coupledto the stream module 202. After the media request has been accepted, thestream module 202 can start streaming the requested media object fromthe target viewer device.

The media distribution node system 200 can include a topology managementmodule 228. The topology management module 228 is for managing anarrangement of how data flows between the media distribution node system200 and other viewer devices connected to the media distribution nodesystem 200. The topology management module 228 can determine theneighbor of each peer, such as the media distribution node system 200.For example, the media distribution node system 200 can execute thetopology management module 228 to determine which other viewer devicenode it would like to connect with and if it will reject certainconnection requests.

In determining which target viewer devices to request portions of themedia object 204 via the media request 210, the topology managementmodule 228 can utilize detail information of the viewer devicesconnected to the media server system 104. The detail informationincludes bandwidth, CPU speed, geolocation, Internet Service Provider,and any combination thereof. Although the topology management module 228has been illustrated to reside on the media distribution node system200, the whole or portions of the topology management module 228 canalso reside on the media server system 104 of FIG. 1.

For example, the target viewer device can be selected based on itsphysical location relative to the requesting viewer device, its IPaddress, available bandwidth, processing power, available memory,operating system type, or any combination thereof. The properties of thetarget viewer device can be read from a central server or can bedetermined in an ad-hoc basis by traversing a peer to peer network.

The media server can send a list of target viewer device candidates tothe topology management module 228. The topology management module 228can then determine locally whether to accept those candidates as thetarget viewer devices.

The topology management module 228 can be coupled to the requestormodule 224 to discover better neighbor candidates to act as the targetviewer device. “Neighbor candidates” are viewer devices within apeer-to-peer network with the media distribution node system 200 thatmay be physically or virtually close to the media distribution nodesystem 200. The topology management module 228 can remove connectionsmade by the request module 224. The topology management module 228 canalso make recommendations or dictate the target viewer devices for therequest module 224.

The topology management module 228 can be coupled to the confirmationmodule 212. For example, the topology management module 228 can receiveall media requests, such as the media request 210, from the other viewerdevices, and determine which of the media requests to fulfill. Thedetermination of whether to fulfill the media requests can be based onproperties or attributes of either the requesting viewer device or themedia distribution node system 200. The properties or attributesconsidered can be the same as for selecting or determining the targetviewer devices.

The media distribution node system 200 can include a play module 234.The play module 234 is for playing the media object 204. The play module234 can be coupled to the stream module 202. The play module 234 caninclude hardware control for displaying an image or a video through abrowser application. The play module 234 can also include hardwarecontrol for playing an audio through a browser application.

The media distribution node system 200 can also include a memorymanagement module 236 and a virtual machine (VM) optimizer module 234.The modules described in FIG. 2 can be software modules as implementedin the distribution application on a non-transitory memory. Thedistribution application can be downloaded via an instance of a webbrowser application by specifying an Internet Protocol (IP) address orentering a Uniformed Resource Locator (URL) address. Once downloaded,the web browser application may allocate a sandboxed memory space forthe distribution application to operate in, such as the media storagespace 206, including a sandboxed volatile memory space, a sandboxednon-volatile memory space, or any combination thereof.

The memory management module 236 is for facilitating the use of thesandboxed memory space. For example, the stream module 202 may bedownloading portions of the media object 204 to the sandboxed memoryspace. The memory management module 236 can halt the streaming if thesandboxed memory space becomes full. The memory management module 236can also compress stored content in the sandboxed memory space when thesandboxed memory space is beyond a threshold percentage of being full.The memory management module 236 can selectively delete portions of themedia object 204 stored in the sandboxed memory space once that portionhas been played to the user and/or serviced to a requesting viewerdevice.

The sandboxed memory space for operating the media distribution nodesystem 200 has been discovered to provide a safe environment for usersin a peer-to-peer distribution network. Because the memory space issandboxed to the browser instance, there is no risk of a viewer gettinga virus through the over media distribution network system.

The memory management module 236 can communicate with the media serverto determine what portions of the media object 204 to cache in memoryafter the portions have been played by the play module 234. For example,the media server can recommend to the memory management module 236 tostore less of the media object 204 when there are a lot of viewerdevices watching the media object 204 or to store more of the mediaobject 204 when there are not as many viewer devices watching the mediaobject 204.

The VM optimizer module 238 is for optimizing the modules disclosed inFIG. 2 to run on the media distribution node system 200. For example,the VM optimizer module 238 may be for Flash VM optimization or forJavaScript VM optimization. The VM optimizer module 238 can pipeline theinstructions from the modules. The VM optimizer module 238 can cache orgroup the instructions from the modules. The VM optimizer can predict orcombine conditional branch instructions of the modules.

Accordingly, embodiments of the invention comprises a technical solution(streaming a portion of the media object from a first browser to asecond browser) that solves a technical problem (apportioning limitedcomputer resources such as processing power, bandwidth, storage), adoptone or more technical means (e.g., service module 218, which can includean application specific integrated circuit (ASIC), and/or software withprocessor to execute same, etc.) and produce a technical effect (e.g.,quicker computer processing, data transmission, efficient data storage,and data broadcast, etc.).

Referring now to FIG. 3, therein is shown an example of a requesterviewer device 302 parallel streaming a media object 304 from a networkof viewer devices 306. The requester viewer device 302 can be the firstviewer device 102 of FIG. 1, the second viewer device 106 of FIG. 1, orthe media distribution node system 200 of FIG. 2. The media object 304can be the media object 110 of FIG. 1 or the media object 206 of FIG. 2.The viewer devices 306 can include the first viewer device 102 of FIG.1, the second viewer device 106 of FIG. 1, the media distribution nodesystem 200 of FIG. 2, or any combination thereof.

The requester viewer device 302 is illustrated to be connected to adistribution server system 308. The connection can be made when a userof the requester viewer device 302 access the URL of the distributionserver system 308. The distribution server system 308 can be a computersystem as described in FIG. 6. The distribution server system 308 can bethe media server system 104 of FIG. 1. The distribution server system308 is for managing the network of the viewer devices 306 fordistributing media objects. The distribution server system 308 can senda distribution application 310 to the requester viewer device 302.

The distribution application 310 is a software application for selectingthe media object 304 to stream and play, and for facilitating thedownloading and uploading of portions of the media object 304. Thedistribution application 310 can be executable on or interpreted by abrowser application instance running on the requester viewer device 302.The distribution application 310 can be the distribution application 112of FIG. 1. The distribution application 112 can provide the requesterviewer device 302 with a list of available media objects to stream ordownload. Alternatively, the distribution application 112 can providethe requester viewer device 302 with an interface to find, search,select, or randomly select one or more of the media object to stream ordownload. Once downloaded, the distribution application 310 canfacilitate servicing other viewer devices with the media object 304already downloaded to the requester viewer device 302.

The media object 304 is illustrated as having many portions. The size ofeach of the portions can be uniform. The time length of each of theportions can be uniform. Alternatively, the size or the time length ofeach of the portions can be determined by the distribution application310.

For example, a downloaded portion 312, a missing portion 314, and aloading portion 316 are illustrated in FIG. 3. The downloaded portion312 is a portion of the media object 304 that has been retrieved fromeither the distribution server system 308 or one or more of the viewerdevices 306. The missing portion 314 is a portion of the media object304 that is not stored on the requester viewer device 302. The loadingportion 316 is a portion of the media object 304 that is being retrievedfrom the distribution server system 308 or one or more of the viewerdevices 306.

Referring now to FIG. 4, therein is shown a block diagram of modules ofa distribution server system 402 connected to viewer devices 404, inaccordance with another embodiment of the invention. The distributionserver system 402 is for distributing media objects and distributionapplications, such as the media object 110 and the distributionapplication 112.

The distribution server system 402 can be the media server system 104 ofFIG. 1. The distribution server system 402 can include one or moremethods of distributing media objects via a distribution applicationfrom and/or to a view device. The one or more methods can be implementedby components or modules described below. The components and modules canbe implemented as hardware modules, software modules, or any combinationthereof. For example, the modules described can be software modulesimplemented as instructions on a non-transitory memory capable of beingexecuted by a processor or a controller on a machine.

The modules can be implemented as hardware modules, software modules, orany combination thereof. For example, all or some of the modules can bepart of the distribution application 112 of FIG. 1. For example, themodules described can be software modules implemented as instructions ona non-transitory memory capable of being executed by a processor or acontroller on a machine described in FIG. 6.

The distribution server system 402 can include additional, fewer, ordifferent modules for various applications. Conventional components suchas network interfaces, security functions, load balancers, failoverservers, management and network operations consoles, and the like arenot shown so as to not obscure the details of the system.

The distribution server system 402 can be connected to a network of theviewer devices 404 via a network channel 406. The view devices network402 can include the viewer devices 306 of FIG. 3, the first viewerdevice 102 of FIG. 1, the second viewer device 106 of FIG. 1, the mediadistribution node system 200 of FIG. 2, or any combination thereof. Thenetwork channel 406 can be the network channel 108 of FIG. 1.

The distribution server system 402 can include a monitor module 408. Themonitor module 408 is for monitoring the state of each of the viewerdevices 404. The monitor module 408 can perform a bandwidth test on eachof the viewer devices 404. The bandwidth test can include an uploadspeed test, a download speed test, a packet error rate test, or anycombination thereof. The monitor module 408 can also perform a distancecalculation between any or each pair of devices of the viewer devices404.

The monitor module 408 can perform a functional test of each of theviewer devices 404. For example, the functional test can include aninternet connection test, a video playability test, a graphicscapability test, an audio capability test, a webcam capability test, orany combination thereof.

The monitor module 408 can provide statistics of a media distributionsystem that the distribution server system 402 is managing, such as themedia distribution system 100 of FIG. 1. For example, the monitor module408 can provided statistics on the overall system or on aper-viewer-device basis, a per-media-object basis, aper-physical-or-virtual-region basis, a per-media-type basis, or anycombination thereof. The statistics can included a number of viewerdevices connected, a buffer ratio, a bandwidth graph, a viewer devicesdistance graph, or any combination thereof.

The monitor module 408 can also determine statistics of the streamservicing tasks performed on the media distribution system. For example,the monitor module 408 can determine how many of the media objects aredownloaded via the peer-to-peer network in the media distributionsystem, such as the network of the viewer devices 306 of FIG. 3, and howmany of the media objects are downloaded via a content delivery network(CDN). The monitor module 408 can also determine an average number ofpeer viewer devices used to service the streaming or downloading of asingle media object to a single viewer device.

The monitor module 408 can display the determined statistics on areal-time monitoring dashboard. The monitoring dashboard can be ahardware display such as a computer monitor, a touch screen, a mobileapplication on a mobile device, a webpage hosted by the distributionserver system 402, or any combination thereof. The dashboard can bedisplayed on a access-restricted page, including a webpage or anetworked interface, to a technical team of providers or distributors ofthe media objects, including the operator of the distribution serversystem 402. The dashboard can be access restricted, accessible only toregistered members of the technical team on the distribution serversystem 402.

The monitor module 408 can send a notification via email, text message,or a notification window on the monitoring dashboard when one of thecomputer systems of the distribution server system 402 fails. Failureincludes losing Internet connection, powering down, lagging,unresponsive, or any combination thereof.

The distribution server system 402 can include a schedule module 410.The schedule module 410 is for scheduling uploads of portions of a mediaobject from one viewer device of the viewer devices 404 to anotherviewer device of the viewer devices 404. The schedules made can be sentto the viewer devices 404 as proposals or recommendations. The finaldecision of who each device requests portions of the media object fromand who each device services the portions to can be made at each of theviewer devices 404. The schedule module 410 can be coupled to themonitor module 408 to receive bandwidth and functional capabilityinformation about the one viewer device and/or the another viewer deviceto determine the priority of scheduling. The schedule module 410 can befor scheduling one or more portions of a media object on thedistribution server system 402 to be streamed directly or indirectly toone viewer device of the viewer devices 404. For example, the schedulemodule 410 can send the recommended schedules to the topology managementmodule 228 of FIG. 2.

The schedule module 410 can receive a media request for a media objectfrom a requesting viewer device. The schedule module 410 can determinewhether the media request is for the entire media object, portions ofthe media object, or a portion of the media object. The schedule module410 can determine one or more servicing viewer devices to streamrequested portion or portions of the media object to a sandboxed memoryof a browser application on the requesting viewer device.

The servicing viewer devices can be selected based on properties of theservicing viewer devices. For example, the servicing viewer device canbe selected based on its physical location relative to the requestingviewer device, its IP address, available bandwidth, processing power,available memory, operating system type, or any combination thereof. Theproperties of the servicing viewer device can be read from a centralserver or can be determined in an ad-hoc basis by traversing a peer topeer network. The topology strategy and the list of the servicing viewerdevices can be sent to the topology management module 228. The topologymanagement module 228 can then determine whether to select the specificrecommended servicing viewer devices based on local viewer deviceinformation.

The distribution server system 402 can include a verification module412. The verification module 412 is for verifying that a viewer deviceis part of a recognized network of viewer devices. The verificationmodule 412 can register a viewer device to be part of the recognizednetwork. For example, the verification module 412 can store hash valuesof each of the viewer devices 404 running the distribution application.The verification module 412 can verify a registration of a requestingviewer device for a media object in response to receiving a mediarequest for the media object.

The verification module 412 can be coupled to the schedule module 410.The verification module 412 can verify a registration of a servingviewer device before scheduling the serving viewer device to serve aportion of a media object to the requesting viewer device. Theverification module 412 can verify by comparing a hash value receivedfrom a viewer device to a list of registered hash values.

The distribution server system 402 can include an encryption module 414.The encryption module 414 can be coupled to the schedule module 410. Theencryption module 414 is for encrypting content delivered from thedistribution server system 402 to a viewer device of the viewer devices404. The encryption can be triggered by scheduling of a portion of amedia object to be streamed from the distribution server system 402 to aviewer device as dictated by the schedule module 410. The encryptionmodule 414 can encrypt contents delivered such that all subsequentdelivery or replication of the delivered content would be encrypted. Theencryption module 414 can store an encryption key on the distributionserver system 402 for retrieval upon request. For example, theencryption module 414 can return the encryption key to a requestingviewer device when the verification module 412 confirms that therequesting viewer device is registered with the distribution serversystem 402.

The distribution server system 402 can include a cache schedule module418. The cache schedule module 418 is for determining or scheduling whatportions of a media object to cache on the viewer devices 404. Forexample, considering if each peer would have 50-500 MB active memorycaching the portions of the media objects it downloaded, thepeer-to-peer network would have a large distributed memory (50-500 MBtime the number of peer view devices). Cache scheduling is a way todirect the peer-to-peer viewer device nodes to manage their memory withspecial consideration on volatile property of memory.

As a specific example, we may have 100,000 peers watching a 1 GB movie(the media object), and each peer may have 100 MB memory. The cacheschedule module 418 can help each of the viewer devices 404 determine adifferent portion of the 1 GB movie to cache for a better sharingresult. Instead of caching the beginning 100 MB of the movie on eachpeer, the cache schedule module 418 can instruct 10,000 of the viewerdevices 404 to cache the first 100 MB of the movie, another 10,000 peersto cache the second 100 MB of the movie and so on.

The cache schedule module 418 can determine or recommend for each peerwhat portion of the media object to cache. The division of use of cachecan be based on statistics of the monitor module 408. For example, thedivision of use of cache can be based on peer arrive/leave statistics(with consideration of volatile property of memory), media objectstatistics, sharing statistics, geolocation of the viewer devices 404,peer network statistics, other factors, or any combination thereof. Thecache schedule module 418 can send the determined or recommended cacheschedule to the memory management 236 of FIG. 2. The memory managementmodule 236 can then determine whether to execute the recommendedschedule.

The distribution server system 402 can include a deployment module 420.The deployment module 420 is for providing a distribution application,such as the distribution application 112 of FIG. 1, to a viewer deviceof the viewer devices 404 for execution in a browser application. Thedistribution application, once executing in or being interpreted by abrowser application on the viewer device, can receive schedules foruploading or downloading portions of media objects from the schedulemodule 410. The deployment module 420 can also be for updatinginstructions, modules, schedules, other contents, or any combinationthereof to the distribution application to the viewer device.

The distribution server system 402 can include a cluster managementmodule 422. In one embodiment of the invention, the distribution serversystem 402 can be a cluster of computer systems, such as computersystems described in FIG. 6. The cluster management module 422 is formanaging the cluster of the computer systems. The cluster managementmodule 422 can be responsible for load-balancing the clusters. Thecluster management module 422 can perform fault-tolerance managementfunctions.

For example, for fault-tolerance management, the cluster managementmodule 422 can perform DNS round-robin of the computer systems. Thecluster management module 422 can also execute commands for unitrecovery for a computer system that goes down. The cluster managementmodule 422 can also execute replacement commands to locate a substitutecomputer system to take over the tasks of a failed computer system.

Referring now to FIG. 5, therein is shown a flow chart of a method 500of operating a media distribution system, such as the media distributionsystem 100 of FIG. 1 or the media distribution node system 200 of FIG.2, in a further embodiment of the present invention. The method 500includes: streaming a media object from an external system via a firstbrowser in a method step 502; receiving a media request from a viewerdevice in a method step 504; determining a confirmation of whether themedia request is for the media object in a method step 506; and servinga portion of the media object from a sandboxed memory of the firstbrowser for presenting on a second browser of the viewer device inresponse to the confirmation in a method step 508.

Referring now to FIG. 6, therein is shown a diagrammatic representationof a machine in the example form of a computer system 600 within which aset of instructions, for causing the machine to perform any one or moreof the methodologies or modules discussed herein, may be executed. Thecomputer system 600 can be an example of the first viewer device 102 ofFIG. 1, the second viewer device 106 of FIG. 1, or the media serversystem 104 of FIG. 1.

In the example of FIG. 6, the computer system 600 includes a processor,memory, non-volatile memory, and an interface device. Various commoncomponents (e.g., cache memory) are omitted for illustrative simplicity.The computer system 600 is intended to illustrate a hardware device onwhich any of the components depicted in the example of FIGS. 1-4 (andany other components described in this specification) can beimplemented. The computer system 600 can be of any applicable known orconvenient type. The components of the computer system 600 can becoupled together via a bus or through some other known or convenientdevice.

The processor may be, for example, a conventional microprocessor such asan Intel Pentium microprocessor or Motorola power PC microprocessor. Oneof skill in the relevant art will recognize that the terms“machine-readable (storage) medium” or “computer-readable (storage)medium” include any type of device that is accessible by the processor.

The memory is coupled to the processor by, for example, a bus. Thememory can include, by way of example but not limitation, random accessmemory (RAM), such as dynamic RAM (DRAM) and static RAM (SRAM). Thememory can be local, remote, or distributed.

The bus also couples the processor to the non-volatile memory and driveunit. The non-volatile memory is often a magnetic floppy or hard disk, amagnetic-optical disk, an optical disk, a read-only memory (ROM), suchas a CD-ROM, EPROM, or EEPROM, a magnetic or optical card, or anotherform of storage for large amounts of data. Some of this data is oftenwritten, by a direct memory access process, into memory during executionof software in the computer 600. The non-volatile storage can be local,remote, or distributed. The non-volatile memory is optional becausesystems can be created with all applicable data available in memory. Atypical computer system will usually include at least a processor,memory, and a device (e.g., a bus) coupling the memory to the processor.

Software is typically stored in the non-volatile memory and/or the driveunit. Indeed, for large programs, it may not even be possible to storethe entire program in the memory. Nevertheless, it should be understoodthat for software to run, if necessary, it is moved to a computerreadable location appropriate for processing, and for illustrativepurposes, that location is referred to as the memory in this paper. Evenwhen software is moved to the memory for execution, the processor willtypically make use of hardware registers to store values associated withthe software, and local cache that, ideally, serves to speed upexecution. As used herein, a software program is assumed to be stored atany known or convenient location (from non-volatile storage to hardwareregisters) when the software program is referred to as “implemented in acomputer-readable medium.” A processor is considered to be “configuredto execute a program” when at least one value associated with theprogram is stored in a register readable by the processor.

The bus also couples the processor to the network interface device. Theinterface can include one or more of a modem or network interface. Itwill be appreciated that a modem or network interface can be consideredto be part of the computer system 600. The interface can include ananalog modem, isdn modem, cable modem, token ring interface, satellitetransmission interface (e.g., “direct PC”), or other interfaces forcoupling a computer system to other computer systems. The interface caninclude one or more input and/or output devices. The I/O devices caninclude, by way of example but not limitation, a keyboard, a mouse orother pointing device, disk drives, printers, a scanner, and other inputand/or output devices, including a display device. The display devicecan include, by way of example but not limitation, a cathode ray tube(CRT), liquid crystal display (LCD), or some other applicable known orconvenient display device. For simplicity, it is assumed thatcontrollers of any devices not depicted in the example of FIG. 6 residein the interface.

In operation, the computer system 600 can be controlled by operatingsystem software that includes a file management system, such as a diskoperating system. One example of operating system software withassociated file management system software is the family of operatingsystems known as Windows® from Microsoft Corporation of Redmond, Wash.,and their associated file management systems. Another example ofoperating system software with its associated file management systemsoftware is the Linux operating system and its associated filemanagement system. The file management system is typically stored in thenon-volatile memory and/or drive unit and causes the processor toexecute the various acts required by the operating system to input andoutput data and to store data in the memory, including storing files onthe non-volatile memory and/or drive unit.

Some portions of the detailed description may be presented in terms ofalgorithms and symbolic representations of operations on data bitswithin a computer memory. These algorithmic descriptions andrepresentations are the means used by those skilled in the dataprocessing arts to most effectively convey the substance of their workto others skilled in the art. An algorithm is here, and generally,conceived to be a self-consistent sequence of operations leading to adesired result. The operations are those requiring physicalmanipulations of physical quantities. Usually, though not necessarily,these quantities take the form of electrical or magnetic signals capableof being stored, transferred, combined, compared, and otherwisemanipulated. It has proven convenient at times, principally for reasonsof common usage, to refer to these signals as bits, values, elements,symbols, characters, terms, numbers, or the like.

It should be borne in mind, however, that all of these and similar termsare to be associated with the appropriate physical quantities and aremerely convenient labels applied to these quantities. Unlessspecifically stated otherwise as apparent from the following discussion,it is appreciated that throughout the description, discussions utilizingterms such as “processing” or “computing” or “calculating” or“determining” or “displaying” or “generating” or the like, refer to theaction and processes of a computer system, or similar electroniccomputing device, that manipulates and transforms data represented asphysical (electronic) quantities within the computer system's registersand memories into other data similarly represented as physicalquantities within the computer system memories or registers or othersuch information storage, transmission or display devices.

The algorithms and displays presented herein are not inherently relatedto any particular computer or other apparatus. Various general purposesystems may be used with programs in accordance with the teachingsherein, or it may prove convenient to construct more specializedapparatus to perform the methods of some embodiments. The requiredstructure for a variety of these systems will appear from thedescription below. In addition, the techniques are not described withreference to any particular programming language, and variousembodiments may thus be implemented using a variety of programminglanguages.

In alternative embodiments, the machine operates as a standalone deviceor may be connected (e.g., networked) to other machines. In a networkeddeployment, the machine may operate in the capacity of a server or aclient machine in a client-server network environment, or as a peermachine in a peer-to-peer (or distributed) network environment.

The machine may be a server computer, a client computer, a personalcomputer (PC), a tablet PC, a laptop computer, a set-top box (STB), apersonal digital assistant (PDA), a cellular telephone, an iPhone, aBlackberry, a processor, a telephone, a web appliance, a network router,switch or bridge, or any machine capable of executing a set ofinstructions (sequential or otherwise) that specify actions to be takenby that machine.

While the machine-readable medium or machine-readable storage medium isshown in an exemplary embodiment to be a single medium, the term“machine-readable medium” and “machine-readable storage medium” shouldbe taken to include a single medium or multiple media (e.g., acentralized or distributed database, and/or associated caches andservers) that store the one or more sets of instructions. The term“machine-readable medium” and “machine-readable storage medium” shallalso be taken to include any medium that is capable of storing, encodingor carrying a set of instructions for execution by the machine and thatcause the machine to perform any one or more of the methodologies ormodules of the presently disclosed technique and innovation.

In general, the routines executed to implement the embodiments of thedisclosure, may be implemented as part of an operating system or aspecific application, component, program, object, module or sequence ofinstructions referred to as “computer programs.” The computer programstypically comprise one or more instructions set at various times invarious memory and storage devices in a computer, and that, when readand executed by one or more processing units or processors in acomputer, cause the computer to perform operations to execute elementsinvolving the various aspects of the disclosure.

Moreover, while embodiments have been described in the context of fullyfunctioning computers and computer systems, those skilled in the artwill appreciate that the various embodiments are capable of beingdistributed as a program product in a variety of forms, and that thedisclosure applies equally regardless of the particular type of machineor computer-readable media used to actually effect the distribution.

Further examples of machine-readable storage media, machine-readablemedia, or computer-readable (storage) media include but are not limitedto recordable type media such as volatile and non-volatile memorydevices, floppy and other removable disks, hard disk drives, opticaldisks (e.g., Compact Disk Read-Only Memory (CD ROMS), Digital VersatileDisks, (DVDs), etc.), among others, and transmission type media such asdigital and analog communication links.

The present invention is implemented with at least one electronic deviceor machine, such as the computer system 600. The present inventionphysically transforms the hardware storages of each of the machines usedin implementing the present invention by downloading and storing atleast a portion of a media object on non-transitory storage medium.Further, the present invention physically transforms the machines usedfor implementation in terms of change in temperature and powerconsumption by utilizing processing and communication bandwidthassociated with the viewer devices. The end result of the inventionwould change the physical temperature and power consumptions of machinesinvolved.

CLARIFICATION

The above description and drawings are illustrative and are not to beconstrued as limiting the invention to the precise forms disclosed.Persons skilled in the relevant art can appreciate that manymodifications and variations are possible in light of the abovedisclosure. Numerous specific details are described to provide athorough understanding of the disclosure. However, in certain instances,well-known or conventional details are not described in order to avoidobscuring the description. References to one or an embodiment in thepresent disclosure can be, but not necessarily are, references to thesame embodiment; and such references mean at least one of theembodiments.

Reference in this specification to “one embodiment” or “an embodiment”means that a particular feature, structure, or characteristic describedin connection with the embodiment is included in at least one embodimentof the disclosure. The appearances of the phrase “in one embodiment” invarious places in the specification are not necessarily all referring tothe same embodiment, nor are separate or alternative embodimentsmutually exclusive of other embodiments. Moreover, various features aredescribed which may be exhibited by some embodiments and not by others.Similarly, various requirements are described which may be requirementsfor some embodiments but not other embodiments.

Unless the context clearly requires otherwise, throughout thedescription and the claims, the words “comprise,” “comprising,” and thelike are to be construed in an inclusive sense, as opposed to anexclusive or exhaustive sense; that is to say, in the sense of“including, but not limited to.” As used herein, the terms “connected,”“coupled,” or any variant thereof, means any connection or coupling,either direct or indirect, between two or more elements; the coupling ofconnection between the elements can be physical, logical, or anycombination thereof. Additionally, the words “herein,” “above,” “below,”and words of similar import, when used in this application, shall referto this application as a whole and not to any particular portions ofthis application. Where the context permits, words in the above DetailedDescription using the singular or plural number may also include theplural or singular number respectively. The word “or,” in reference to alist of two or more items, covers all of the following interpretationsof the word: any of the items in the list, all of the items in the list,and any combination of the items in the list.

While processes or blocks are presented in a given order, alternativeembodiments may perform routines having steps, or employ systems havingblocks, in a different order, and some processes or blocks may bedeleted, moved, added, subdivided, combined, and/or modified to providealternative or subcombinations. Each of these processes or blocks may beimplemented in a variety of different ways. Also, while processes orblocks are at times shown as being performed in series, these processesor blocks may instead be performed in parallel, or may be performed atdifferent times. Further any specific numbers noted herein are onlyexamples: alternative implementations may employ differing values orranges.

The teachings of the disclosure provided herein can be applied to othersystems, not necessarily the system described above. The elements andacts of the various embodiments described above can be combined toprovide further embodiments.

Any patents and applications and other references noted above, includingany that may be listed in accompanying filing papers, are incorporatedherein by reference. Aspects of the disclosure can be modified, ifnecessary, to employ the systems, functions, and concepts of the variousreferences described above to provide yet further embodiments of thedisclosure.

These and other changes can be made to the disclosure in light of theabove Detailed Description. While the above description describescertain embodiments of the disclosure, and describes the best modecontemplated, no matter how detailed the above appears in text, theteachings can be practiced in many ways. Details of the system may varyconsiderably in its implementation details, while still beingencompassed by the subject matter disclosed herein. As noted above,particular terminology used when describing certain features or aspectsof the disclosure should not be taken to imply that the terminology isbeing redefined herein to be restricted to any specific characteristics,features, or aspects of the disclosure with which that terminology isassociated. In general, the terms used in the following claims shouldnot be construed to limit the disclosure to the specific embodimentsdisclosed in the specification, unless the above Detailed Descriptionsection explicitly defines such terms. Accordingly, the actual scope ofthe disclosure encompasses not only the disclosed embodiments, but alsoall equivalent ways of practicing or implementing the disclosure underthe claims.

While certain aspects of the disclosure are presented below in certainclaim forms, the inventors contemplate the various aspects of thedisclosure in any number of claim forms. For example, while only oneaspect of the disclosure is recited as a means-plus-function claim under35 U.S.C. §112, ¶6, other aspects may likewise be embodied as ameans-plus-function claim, or in other forms, such as being embodied ina computer-readable medium. (Any claims intended to be treated under 35U.S.C. §112, ¶6 will begin with the words “means for”.) Accordingly, theapplicant reserves the right to add additional claims after filing theapplication to pursue such additional claim forms for other aspects ofthe disclosure.

The terms used in this specification generally have their ordinarymeanings in the art, within the context of the disclosure, and in thespecific context where each term is used. Certain terms that are used todescribe the disclosure are discussed above, or elsewhere in thespecification, to provide additional guidance to the practitionerregarding the description of the disclosure. For convenience, certainterms may be highlighted, for example using capitalization, italicsand/or quotation marks. The use of highlighting has no influence on thescope and meaning of a term; the scope and meaning of a term is thesame, in the same context, whether or not it is highlighted. It will beappreciated that same element can be described in more than one way.

Consequently, alternative language and synonyms may be used for any oneor more of the terms discussed herein, nor is any special significanceto be placed upon whether or not a term is elaborated or discussedherein. Synonyms for certain terms are provided. A recital of one ormore synonyms does not exclude the use of other synonyms. The use ofexamples anywhere in this specification including examples of any termsdiscussed herein is illustrative only, and is not intended to furtherlimit the scope and meaning of the disclosure or of any exemplifiedterm. Likewise, the disclosure is not limited to various embodimentsgiven in this specification.

Without intent to further limit the scope of the disclosure, examples ofinstruments, apparatus, methods and their related results according tothe embodiments of the present disclosure are given below. Note thattitles or subtitles may be used in the examples for convenience of areader, which in no way should limit the scope of the disclosure. Unlessotherwise defined, all technical and scientific terms used herein havethe same meaning as commonly understood by one of ordinary skill in theart to which this disclosure pertains. In the case of conflict, thepresent document, including definitions will control.

Some portions of this description describe the embodiments of theinvention in terms of algorithms and symbolic representations ofoperations on information. These algorithmic descriptions andrepresentations are commonly used by those skilled in the dataprocessing arts to convey the substance of their work effectively toothers skilled in the art. These operations, while describedfunctionally, computationally, or logically, are understood to beimplemented by computer programs or equivalent electrical circuits,microcode, or the like. Furthermore, it has also proven convenient attimes, to refer to these arrangements of operations as modules, withoutloss of generality. The described operations and their associatedmodules may be embodied in software, firmware, hardware, or anycombinations thereof.

Any of the steps, operations, or processes described herein may beperformed or implemented with one or more hardware or software modules,alone or in combination with other devices. In one embodiment, asoftware module is implemented with a computer program productcomprising a computer-readable medium containing computer program code,which can be executed by a computer processor for performing any or allof the steps, operations, or processes described.

Embodiments of the invention may also relate to an apparatus forperforming the operations herein. This apparatus may be speciallyconstructed for the required purposes, and/or it may comprise ageneral-purpose computing device selectively activated or reconfiguredby a computer program stored in the computer. Such a computer programmay be stored in a non transitory, tangible computer readable storagemedium, or any type of media suitable for storing electronicinstructions, which may be coupled to a computer system bus.Furthermore, any computing systems referred to in the specification mayinclude a single processor or may be architectures employing multipleprocessor designs for increased computing capability.

Embodiments of the invention may also relate to a product that isproduced by a computing process described herein. Such a product maycomprise information resulting from a computing process, where theinformation is stored on a non transitory, tangible computer readablestorage medium and may include any embodiment of a computer programproduct or other data combination described herein.

Finally, the language used in the specification has been principallyselected for readability and instructional purposes, and it may not havebeen selected to delineate or circumscribe the inventive subject matter.It is therefore intended that the scope of the invention be limited notby this detailed description, but rather by any claims that issue on anapplication based hereon. Accordingly, the disclosure of the embodimentsof the invention is intended to be illustrative, but not limiting, ofthe scope of the invention, which is set forth in the following claims.

What is claimed is:
 1. A method of operating a peer to peer mediadistribution system comprising: streaming a media object from a targetsystem via a first browser, the first browser being an application forretrieving, presenting, and traversing information resources on theWorld Wide Web (WWW); receiving a media request from a viewer device;determining a confirmation of whether the media request is for the mediaobject; and serving a portion of the media object from a sandboxedmemory of the first browser for presenting on a second browser of theviewer device in response to the confirmation.
 2. The method of claim 1,further comprising verifying the viewer device is registered at adistribution server.
 3. The method of claim 1, further comprisingdownloading an in-browser distribution application for execution on thefirst browser, the in-browser distribution application for streaming themedia object and serving the portion of the media object.
 4. The methodof claim 1, further comprising: determining an attribute of the viewerdevice; and determining whether to respond to the viewer device based onthe attribute.
 5. The method of claim 4, wherein the attribute includesavailable bandwidth, available processing power, available memory,functional capability, geographical location, Internet service provideridentity, or any combination thereof.
 6. The method of claim 1, whereinthe media object is a stream-enabled media that has a sequentialproperty, wherein the media object has a set duration of time and whereportions of the media object correspond to pieces within a sequence inthe set duration.
 7. The method of claim 1, wherein streaming the mediaobject includes downloading different time chunks of the media object inparallel from different sources.
 8. The method of claim 1, wherein themedia request is a digital package that specifies the media object and aportion of the media object that the viewer device is requesting.
 9. Themethod of claim 1, further comprising selecting the target system as asource of said streaming, wherein said selecting is based on anattribute of target system.
 10. The method of claim 9, furthercomprising receiving the attribute from a distribution server.
 11. Themethod of claim 9, further comprising traversing a peer to peer networkto identify the attribute of the target system.
 12. A computing devicecomprising: a non-transitory memory including a browser application anda sandboxed memory of the browser application, the browser applicationbeing an application for retrieving, presenting, and traversinginformation resources on the World Wide Web (WWW); a processor forexecuting the browser application; an in-browser distributionapplication for execution in the browser application comprising: astream module configured to stream, via the browser application, a mediaobject from an external system; a communication module configured toreceive a media request from a viewer device; a confirmation module,coupled to the stream module and the communication module, configured todetermine a confirmation of whether the media request is for the mediaobject; and a service module, coupled to the confirmation module, thecommunication module, and the stream module, configured to serve, inresponse to the confirmation, a portion of the media object from thesandboxed memory of the browser application for presenting on anotherbrowser application running on the viewer device.
 13. The computingdevice of claim 12, wherein the communication module is configured toverify with a server system that the viewer device is registered withthe server system.
 14. The computing device of claim 12, wherein thebrowser application is configured to download and execute the in-browserdistribution application.
 15. The computing device of claim 12, whereinthe confirmation module is configured to determine a functionalcapability, an available memory space, processing power, availablebandwidth, an operating system type, or any combination thereof, of theviewer device.
 16. The computing device of claim 12, wherein thein-browser distribution application is restricted from scanning,reading, or writing to the non-transitory memory aside from thesandboxed memory.
 17. The computing device of claim 12, wherein thein-browser distribution application is a run-time instance of abrowser-based application that is terminated when a run-time instance ofthe browser application is terminated or halted by the processor. 18.The computing device of claim 17, wherein the in-browser distributionapplication is implemented as an application based on Flash, JavaScript,Java applet, HTML 5, or any combination thereof.
 19. The computingdevice of claim 12, wherein the in-browser distribution applicationfurther comprises a topology management module configured to determinewhich viewer device to connect with for the stream module to stream themedia object.
 20. The computing device of claim 19, wherein the topologymanagement module is configured to determine whether to reject the mediarequest.
 21. The computing device of claim 19, wherein the topologymanagement module is configured to receive a list of target devicecandidates from a media server.
 22. The computing device of claim 19,wherein the topology management module is coupled to a request module;and wherein the request module is configured to discover neighboringdevice candidates from a peer to peer network as a potential source forthe stream module to stream the media object.
 23. The computing deviceof claim 12, wherein the media request includes a request for thein-browser distribution application to report an available bandwidth,processing power, available memory, a functional capability, anoperating system type, or any combination thereof, of the computingdevice.
 24. The computing device of claim 12, further comprising a playmodule configured to play the media object on the computing device viathe browser application.
 25. A computer readable data memory storingcomputer-executable instructions that, when executed by a computersystem, cause the computer system to perform a computer-implementedmethod, the instructions comprising: instructions for streaming a mediaobject from an external system via a first browser, the first browserbeing an application for retrieving, presenting, and traversinginformation resources on the World Wide Web (WWW); instructions forreceiving a media request from a viewer device; instructions fordetermining a confirmation of whether the media request is for the mediaobject; and instructions for serving a portion of the media object froma sandboxed memory of the first browser for presenting on a secondbrowser of the viewer device in response to the confirmation.
 26. Adistribution node system comprising: processing means for streaming amedia object from an external system via a first browser; communicationmeans for receiving a media request from a viewer device; control means,coupled to the processing means and the communication means, fordetermining a confirmation of whether the media request is for the mediaobject; and data output means, coupled to the control means, for servinga portion of the media object from a sandboxed memory of the firstbrowser for presenting on a second browser of the viewer device inresponse to the confirmation.